package br.com.sgpv2.controler.folha;

import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import br.com.sgpv2.controler.SGPController;
import br.com.sgpv2.entity.movimentacao.MesEnum;
import br.com.sgpv2.entity.movimentacao.MovimentacaoDTO;
import br.com.sgpv2.service.folha.FolhaService;
import br.com.sgpv2.service.movimentacao.MovimentacaoService;

@Controller
public class FolhasController extends SGPController {

	@Autowired
	private MovimentacaoService movimentacaoService;
	
	@Autowired
	private FolhaService folhaService;
	
	@RequestMapping(value = "/folhas", method = RequestMethod.GET)
	public String folhas(Model model) throws Exception {

		configurarMovimentacoes(null, null, model);
		model.addAttribute("mes", MesEnum.values());
		return "folhas";
	}
	
	@RequestMapping(value = "/folhas/pesquisar", method = RequestMethod.POST)
	public String folhas(@RequestParam(required = false) String ano,
			@RequestParam(required = false) String mes, Model model)
			throws Exception {
		
		configurarMovimentacoes(ano, mes, model);
		model.addAttribute("mes", MesEnum.values());
		return "folhas";
	}
	
	@RequestMapping(value = "/folhas/fechar_folha/{mes}/{ano}", method = RequestMethod.GET)
	public String fecharFolha(@PathVariable Integer mes, @PathVariable Integer ano, Model model) throws Exception {
		folhaService.fecharFolha(mes, ano);
		configurarMovimentacoes(null, null, model);
		model.addAttribute("mes", MesEnum.values());
		model.addAttribute("exibirCombo", true);
		return "folhas";
	}
	
	@ResponseBody
	@RequestMapping(value = "/folhas/paginacao/{acao}", method = RequestMethod.GET)
	public ModelAndView paginacao(@PathVariable String acao, Model model) throws Exception {		
		navegarPaginacao(acao, model);
		model.addAttribute("movimentacoes", getPagedListHolder().getPageList());
		return new ModelAndView("folha.lista");
	}
	
	private void configurarMovimentacoes(String anoStr, String mesStr, Model model) {
			
			Integer ano = null;
			Integer mes = null;
			
			if (StringUtils.isNotBlank(anoStr)) {
				ano = Integer.valueOf(anoStr);
			}
			
			if (StringUtils.isNotBlank(mesStr)) {
				mes = Integer.valueOf(mesStr);
			}
			
			List<MovimentacaoDTO> movimentacoes = movimentacaoService
					.consultarPorPeriodoEntidade(mes, ano);
			configurarPaginacao(movimentacoes, model);
			model.addAttribute("movimentacoes", getPagedListHolder().getPageList());
		}
	
}
